home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / hewin / ccisrc / nifty.cci < prev    next >
Text File  |  1993-11-30  |  24KB  |  907 lines

  1. /*************************************************************************
  2. *    "nifty.cci" : NIFTY-Serve 用センター処理
  3. *-------------------------------------------------------------------------
  4. *    Last modified    1993. 4.19
  5. *                    1993.10.02
  6. *************************************************************************/
  7.  
  8. #ifdef    CENTERKEY
  9. #undef    CENTERKEY
  10. #endif
  11. #ifdef    RECKEY
  12. #undef    RECKEY
  13. #endif
  14.  
  15. #define    CENTERKEY    "NIFTY"
  16. #define    RECKEY        _nifty_recKey
  17.  
  18. int        _nifty_fenix;
  19. char    *_nifty_recKey;
  20.  
  21. #ifndef    _NAV_IGNORE
  22. char    NiftyForumList[1024];    /* ナビゲーション用巡回フォーラムリスト    */
  23. #endif
  24.  
  25. int        _NIFTY_init()
  26. {
  27.     char    *center;
  28.  
  29.     if ( (center = NTM_centerAlloc( CENTERKEY )) != NULL )
  30.     {
  31.         NtmCenterSetName   ( center, "NIFTY-Serve");    /* センタ名    */
  32.         NtmCenterSetFuncKey( center, "NIFTY");            /* 関数名    */
  33.         NtmCenterSetRecKey ( center, "NIFTY");            /* 記録用    */
  34.         NtmCenterSetRsPara ( center, -1, -1, -1 );        /* RS-232C    */
  35.         NtmCenterSetRsBreak( center, 50 );                /* ブレーク    */
  36.         NtmCenterSetCrWait ( center, 100 );                /* CRウェイト    */
  37.         NtmCenterSetTel    ( center, "XX-XXXX-XXXX" );    /* Tel.        */
  38.         NtmCenterSetPara   ( center, "-fenix 2" );        /* fenix    */
  39.         NtmCenterSetModem1 ( center, "ATZ" );            /* モデム        */
  40.     }
  41.  
  42. #ifndef    _NAV_IGNORE
  43.     /* ナビゲーション用初期設定    */
  44.     strcpy( NiftyForumList, "FTOWNS1 FTOWNS2 FFMHOB FFMAV");
  45. #endif
  46.  
  47.     return (NORMAL);
  48. }
  49.  
  50. /*************************************************************************
  51. *    ナビゲーション用初期化
  52. *************************************************************************/
  53.  
  54. int        _NIFTY_naviInit( char *ntm, char *center )
  55. {
  56. #ifndef    _NAV_IGNORE
  57. #ifndef    _NIFNAV_IGNORE
  58.     NtmSetNaviServiceMode( ntm, 1 );
  59. #else
  60.     NtmSetNaviServiceMode( ntm, 0 );
  61. #endif
  62. #endif
  63.     return (NORMAL);
  64. }
  65.  
  66. /*************************************************************************
  67. *    パラメータの指定
  68. *************************************************************************/
  69.  
  70. int        _NIFTY_para( char *ntm, char *center )
  71. {
  72.     char    *keyWord;
  73.     char    *id, *pw;
  74.  
  75.     keyWord = NtmCenterGetKeyWord(center);
  76.     if ( NTM_centerConfig( keyWord ) == NORMAL )
  77.     {
  78.         id  = NtmCenterGetID      ( center );
  79.         pw  = NtmCenterGetPassword( center );
  80.         if ( id[0] == 0 || pw[0] == 0 )
  81.             return (ERR);
  82.         return (NORMAL);
  83.     } else
  84.         return (ERR);
  85. }
  86.  
  87.  
  88. /*************************************************************************
  89. *    処理の中断
  90. *************************************************************************/
  91.  
  92. int        _NIFTY_abort( char *ntm, char *center )
  93. {
  94.     AplRecWrite("%s:Abort", RECKEY);
  95.     NTM_offline( ntm, DTR_OFF_TIME );    /* DTR を指定時間 OFF */
  96.     return (NORMAL);
  97. }
  98.  
  99. /*************************************************************************
  100. *    [AUTO]メニュー処理
  101. *************************************************************************/
  102.  
  103. int        _NIFTY_autoMenu( char *ntm, char *center, int x, int y)
  104. {
  105.     int        ret;
  106.     char    *obj;
  107.     char    *mnu;
  108.     char    title[128], tmp[128], tmBuf[32];
  109.     long    loginTime;
  110.  
  111.     loginTime = NtmCenterGetTime(center, NTM_TIME_LOGIN );
  112.     if ( loginTime )
  113.     {    sprintf( tmp, "Login time %s ", GetAsciiTime(tmBuf, loginTime) );
  114.     } else
  115.     {    strcpy ( tmp, "Login time XXXX/XX/XX XX:XX:XX");
  116.     }
  117.     obj = MNU_alloc(3);
  118.     MNU_setObj(obj, 0, MNU_MSG,  0 , tmp               , NULL, 1, NULL, NULL );
  119.     MNU_setObj(obj, 1, MNU_NOR, 'O', "OFF 終了"        , NULL, 1, NULL, NULL );
  120.     MNU_setObj(obj, 2, MNU_NOR, 'B', "OFF 強制回線切断", NULL, 2, NULL, NULL );
  121.  
  122.     sprintf( title, "MENU : %s", NtmCenterGetName(center));
  123.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, title );
  124.     ret = MNU_start ( mnu );
  125.     MNU_close(mnu);
  126.     MNU_free(obj);
  127.     switch ( ret )
  128.     {
  129.         case 1:
  130.             return    NTM_callLogout( ntm );
  131.         case 2:
  132.             NTM_wait(3);
  133.             AplRecWrite("%s:Abort disconnect", RECKEY);
  134.             return    NTM_offline(ntm, DTR_OFF_TIME);
  135.     }
  136.     return (NORMAL);
  137. }
  138.  
  139. #ifdef    _TAROPYON_SYSTEM
  140. #    include    "niftylog.cci"
  141. #endif
  142.  
  143. #ifndef    _NIFNAV_IGNORE
  144. #    include    "NAV/niftynav.cci"
  145. #endif
  146.  
  147. /*************************************************************************
  148. *    ログイン処理
  149. *************************************************************************/
  150.  
  151. int        _NIFTY_login( char *ntm, char *center )
  152. {
  153.     int        i, ret, retry;
  154.     char    *name, *tel, *id, *pw, *para;
  155.     int        argc;
  156.     char    *s, **argv;
  157.     long    tm;
  158.     char    *cns;
  159.     char    *mos;
  160.     char    *btn;
  161.  
  162.     mos = NULL;
  163.     cns = NtmGetCnsPtr(ntm);
  164.  
  165. #ifdef    _TAROPYON_SYSTEM
  166.     /* ログ保存行数を増やす    */
  167.     if ( CnsGet_maxLinBuf(cns) < 99999 )
  168.         CnsSet_maxLinBuf(cns,99999);
  169. #endif
  170.  
  171.     _nifty_recKey = NtmCenterGetRecKey(center);
  172.  
  173.     name = NtmCenterGetName    ( center );
  174.     tel  = NtmCenterGetTel     ( center );
  175.     id   = NtmCenterGetID      ( center );
  176.     pw   = NtmCenterGetPassword( center );
  177.     if ( tel[0] == 0 || id[0] == 0 || pw[0] == 0 )
  178.     {
  179.         _ntm_errmsg_no_setup_id_and_pw();
  180.         if ( _NIFTY_para( ntm, center ) )
  181.             return (ERR);
  182.         id  = NtmCenterGetID      ( center );
  183.         pw  = NtmCenterGetPassword( center );
  184.         tel = NtmCenterGetTel     ( center );
  185.     }
  186.  
  187.     /*    オプションパラメータの解析    */
  188.     _nifty_fenix = 2;    /* ROAD 2 */
  189.     para = NtmCenterGetPara( center );
  190.     argc = FS_argSet( para, &argv );
  191.     if ( argc > 0 )
  192.     {
  193.         for ( i = 0; i < argc; ++i )
  194.         {    s = argv[i];
  195.             if ( strcmpi( s, "-fenix") == 0 )
  196.             {    s = argv[++i];
  197.                 _nifty_fenix = atoi(s);
  198.             }
  199.         }
  200.         FS_argClear( argc, argv );
  201.         if ( _nifty_fenix < 1 || _nifty_fenix > 3 )
  202.             _nifty_fenix = 2;
  203.     }
  204.  
  205.     _ntm_dspmsg_dial_start( name, tel, cns );
  206.  
  207.     AplRecWrite("%s:Dial start tel.%s", RECKEY, tel );
  208.     if ( ntm_dialStart( ntm, tel ) != NORMAL )
  209.     {
  210. ABORT:    _NIFTY_abort( ntm, center );
  211.         if ( mos )    MOS_pop(mos);
  212.         return (ERR);
  213.     }
  214.  
  215.     mos = MOS_push();
  216.     MOS_curType(MOSCUR_TIME);
  217.     MOS_CON();
  218.  
  219.     AplRecWrite("%s:Connect", RECKEY );
  220.  
  221.     NTM_wait(2);
  222.     if ( _nifty_fenix == 2 || _nifty_fenix == 3 )
  223.     {
  224.         if ( _nifty_fenix == 2 )
  225.         {    /* ROAD 2 */
  226.             retry = 0;
  227.             while ( 1 )
  228.             {
  229.                 NTM_rsPuts( ntm, "@P\r");
  230.                 ret = NTM_waitStr( ntm, 30, "*", NULL );
  231.                 if ( ret == 0  )
  232.                 {    break;
  233.                 } else if ( ret == NTM_WAIT_CANCEL )
  234.                 {    goto    ABORT;
  235.                 }
  236.                 /* time over */
  237.                 ++retry;
  238.                 if ( retry > 5 )
  239.                     goto    ABORT;
  240.             }
  241.         } else
  242.         {    /* ROAD 3 */
  243.             ret = NTM_waitStr( ntm, 30, "*", NULL );
  244.             if ( ret == NTM_WAIT_CANCEL )
  245.                 goto    ABORT;
  246.         }
  247.         retry = 0;
  248.         while ( 1 )
  249.         {
  250.             NTM_wait(1);
  251.             NTM_rsPuts(ntm, "C NIF\r");
  252.             NTM_wait(2);
  253.             ret = NTM_waitInstr(ntm,30," Enter Connection-ID  --->", "*", NULL);
  254.             if ( ret == 0 )            /* "Connection-ID" */
  255.             {    break;
  256.             } else if ( ret == 1 )    /* "*"    */
  257.             {    ++retry;
  258.                 if ( retry > 30 )
  259.                     goto ABORT;
  260.             } else                    /* Cancel or timeout    */
  261.                 goto ABORT;
  262.         }
  263.     } else
  264.     {    /* ROAD 1    */
  265.         retry = 0;
  266.         while ( 1 )
  267.         {    NTM_wait(1);
  268.             NTM_rsPuts(ntm,".00+");
  269.             ret = NTM_waitInstr(ntm, 30,"Enter Connection-ID  --->",
  270.                           ".1", ".2", ".3", ".4", ".5",
  271.                           ".6", ".7", ".8", ".9",
  272.                           "NO CARRIER", NULL );
  273.             if ( ret == 0 )
  274.             {    /* Connection-ID */
  275.                 break;
  276.             } else if ( ret < 10 )
  277.             {    /* '*'    */
  278.                 ++retry;
  279.                 if ( retry > 30 )
  280.                     goto ABORT;
  281.             } else
  282.             {    /* TIME OUT or "NO CARRIER"    */
  283.                 goto ABORT;
  284.             }
  285.         }
  286.     }
  287.  
  288.     NTM_wait(1);
  289.     NTM_rsPuts(ntm,"SVC\r");
  290.  
  291.     ret = NTM_waitStr( ntm, 30, " Enter User-ID  --->", NULL );
  292.     if ( ret == NTM_WAIT_CANCEL )
  293.         goto ABORT;
  294.     NTM_wait(1);
  295.     NTM_rsPuts( ntm, id );    NTM_rsPuts(ntm,"\r");
  296.  
  297.     ret = NTM_waitStr( ntm, 30, " Enter Password --->", NULL);
  298.     if ( ret == NTM_WAIT_CANCEL )
  299.         goto    ABORT;
  300.     NTM_wait(1);
  301.     NTM_rsPuts( ntm, pw );    NTM_rsPuts(ntm,"\r");
  302.  
  303.     /* ログイン時間    */
  304.     time(&tm);
  305.     NtmCenterSetTime( center, NTM_TIME_LOGIN, tm );
  306.     AplRecWrite("%s:Login successful", RECKEY );
  307.     MOS_pop(mos);
  308.  
  309.     return (NORMAL);
  310. }
  311.  
  312.  
  313. /*************************************************************************
  314. *    ログアウト処理
  315. *************************************************************************/
  316.  
  317. int        _NIFTY_logout( char *ntm, char *center )
  318. {
  319.     int        ret;
  320.     long    tm;
  321.  
  322.     time(&tm);
  323.     NtmCenterSetTime( center, NTM_TIME_LOGOUT, tm );
  324.     AplRecWrite("%s:Logout", RECKEY);
  325.     NTM_wait(1);
  326.     NTM_rsPuts( ntm, "OFF\r");
  327.     if ( _nifty_fenix == 2 )
  328.     {    /* ROAD 2 */
  329.         ret = NTM_waitStr( ntm, 60, "*", NULL );
  330.         if ( ret == 0 )
  331.         {    NTM_wait(1);
  332.             NTM_rsPuts( ntm, "OFF\r");
  333.         }
  334.         NTM_waitInstr( ntm, 30, "NO CARRIER", NULL );
  335.     } else
  336.     {    NTM_waitInstr( ntm, 60, "ご利用誠にありがとうございました。", NULL );
  337.     }
  338.     NTM_offline(ntm,DTR_OFF_TIME);
  339.     AplRecWrite("%s:Disconnect", RECKEY);
  340.  
  341. #ifdef    _TAROPYON_SYSTEM
  342.     nifty_log_save( ntm );
  343. #endif
  344.  
  345.     return (NORMAL);
  346. }
  347.  
  348. /*************************************************************************
  349. *    受信行のチェック
  350. *************************************************************************/
  351. int        _NIFTY_lineCheck( char *ntm, char *buf )
  352. {
  353.     return (NORMAL);
  354. }
  355.  
  356. /*************************************************************************
  357. *    入力文字列の送信
  358. *************************************************************************/
  359.  
  360. int        _NIFTY_inputCheck( char *ntm, char *s )
  361. {
  362.     NTM_rsPuts( ntm, s    );
  363.     NTM_rsPuts( ntm, "\r" );
  364.     return (NORMAL);
  365. }
  366.  
  367. /*************************************************************************
  368. *    ID置換用
  369. *************************************************************************/
  370.  
  371. char    *_nif_amac = NULL;
  372.  
  373. int        _nif_open_amac()
  374. {
  375.     char    tmp[256];
  376.  
  377.     if ( _nif_amac == NULL )
  378.     {
  379.         if ( (_nif_amac = AMAC_allocWork(0)) == NULL )
  380.             return (ERR);
  381.         sprintf( tmp,"%s%s", AplGetStartPath(), "nifty_id.tbl" );
  382.         AMAC_load( _nif_amac, tmp );
  383.     }
  384.     return (NORMAL);
  385. }
  386.  
  387. /*************************************************************************
  388. *    ID置換用メニュー
  389. *************************************************************************/
  390.  
  391. int        _nif_setAmac( char *ntm, int x, int y )
  392. {
  393.     int        ret;
  394.     char    *obj;
  395.     char    *mnu;
  396.  
  397.     char    *dlg;
  398.     char    *s, id[8+4], handle[8+4];
  399.  
  400.     char    *fdl;
  401.     char    *fn;
  402.  
  403.     static char    *_LOAD_TITLE = "LOAD ID TABLE DATA for NIFTY-Serve";
  404.     static char    *_SAVE_TITLE = "SAVE ID TABLE DATA for NIFTY-Serve";
  405.  
  406.     _nif_open_amac();
  407.  
  408.     do
  409.     {
  410.         obj = MNU_alloc(3);
  411.         MNU_setObj(obj, 0, MNU_NOR, 'I', "Set ID & handle name", NULL, 1, NULL, NULL );
  412.         MNU_setObj(obj, 1, MNU_NOR, 'L', "Load ID table data"  , NULL, 2, NULL, NULL );
  413.         MNU_setObj(obj, 2, MNU_NOR, 'S', "Save ID table data"  , NULL, 3, NULL, NULL );
  414.  
  415.         mnu = MNU_open( x, y, MNUATT_EXIT, obj, "ID REGISTRATION MENU" );
  416.         ret = MNU_start ( mnu );
  417.         MNU_close(mnu);
  418.         MNU_free(obj);
  419.  
  420.         switch ( ret )
  421.         {
  422.             case 1:
  423.                 id[0] = '\0';
  424.                 dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  425.                     "" );
  426.                 DLG_getsSetTitle( dlg, "ID" );
  427.                 ret = DLG_getsStart( dlg, 8, id );
  428.                 id[8] = '\0';
  429.                 DLG_getsClose(dlg);
  430.                 if ( ret <= 0 )
  431.                 {    ret = TRUE;
  432.                     break;
  433.                 }
  434.  
  435.                 if( (s = AMAC_getName( _nif_amac, id )) == NULL )
  436.                     handle[0] = '\0';
  437.                 else
  438.                 {    /* 既に登録されている    */
  439.                     strncpy( handle, s, 8 );
  440.                     handle[8] = '\0';
  441.                 }
  442.                 dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  443.                     "ID:%s", id );
  444.                 DLG_getsSetTitle( dlg, "HANDLE" );
  445.                 ret = DLG_getsStart( dlg, 8, handle );
  446.                 handle[8] = '\0';
  447.                 DLG_getsClose(dlg);
  448.                 if ( ret < 0 )
  449.                 {    ret = TRUE;
  450.                     break;
  451.                 }
  452.                 AMAC_setKey( _nif_amac, id, handle );
  453.                 ret = 1;
  454.                 break;
  455.  
  456.             case 2:        /* load    */
  457.                 if ( (fdl = FDL_open(0)) == NULL )
  458.                     return (ERR);
  459.                 FDL_set_title( fdl, _LOAD_TITLE );
  460.                 FDL_set_wildcard( fdl, "*.tbl");
  461.                 ret = FDL_start(fdl);
  462.                 fn  = FDL_get_filename(fdl);
  463.                 if ( ret == NORMAL && strlen(fn) > 0 )
  464.                 {
  465.                     dlg = DLG_msgOpen( DLGPOS_CENTER_OF_SCN,DLGPOS_CENTER_OF_SCN,
  466.                         6*60,12*6, C_MBLACK,C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  467.                         _LOAD_TITLE );
  468.                     DLG_msgSetConfig( dlg, 4, 6, 12 );
  469.                     DLG_msgClear( dlg, -1 );
  470.                     DLG_msgPrintf(dlg,"\r\n" );
  471.                     DLG_msgPrintf(dlg,"FILE NAME : %s\r\n", fn );
  472.                     if ( AMAC_load( _nif_amac, fn ) != NORMAL )
  473.                         DLG_msgPrintf(dlg,"@ LOAD ERROR!!r\n" );
  474.                     else
  475.                         DLG_msgPrintf(dlg,"Ok!!\r\n", fn );
  476.                     MNU_wait(3);
  477.                     DLG_msgClose(dlg);
  478.                 }
  479.                 FDL_close(fdl);
  480.                 ret = 1;
  481.                 break;
  482.  
  483.             case 3:        /* save    */
  484.                 if ( (fdl = FDL_open(0)) == NULL )
  485.                     return (ERR);
  486.                 FDL_set_title( fdl, _SAVE_TITLE );
  487.                 FDL_set_wildcard( fdl, "*.tbl");
  488.                 ret = FDL_start(fdl);
  489.                 fn  = FDL_get_filename(fdl);
  490.                 if ( ret == NORMAL && strlen(fn) > 0 )
  491.                 {
  492.                     dlg = DLG_msgOpen( DLGPOS_CENTER_OF_SCN,DLGPOS_CENTER_OF_SCN,
  493.                         6*60,12*6, C_MBLACK,C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  494.                         _SAVE_TITLE );
  495.                     DLG_msgSetConfig( dlg, 4, 6, 12 );
  496.                     DLG_msgClear( dlg, -1 );
  497.                     DLG_msgPrintf(dlg,"\r\n" );
  498.                     DLG_msgPrintf(dlg,"FILE NAME : %s\r\n", fn );
  499.                     if ( AMAC_save( _nif_amac, fn, "NIFTY-Serve ID table" ) != NORMAL )
  500.                         DLG_msgPrintf(dlg,"@ SAVE ERROR!!r\n" );
  501.                     else
  502.                         DLG_msgPrintf(dlg,"Ok!!\r\n", fn );
  503.                     MNU_wait(3);
  504.                     DLG_msgClose(dlg);
  505.                 }
  506.                 FDL_close(fdl);
  507.                 ret = 1;
  508.                 break;
  509.  
  510.             default:
  511.                 ret = 0;
  512.                 break;
  513.         }
  514.     } while ( ret );
  515.  
  516.     return (NORMAL);
  517. }
  518.  
  519. /*************************************************************************
  520. *    フィルタ用関数    :    会議室のタイトルピックアップ
  521. *************************************************************************/
  522.  
  523. int        NiftyFilter_roomTitle( char *ntm, char *buf )
  524. {
  525.     static    int        flag = 0;
  526.     static    char    *reptn_1 = NULL;
  527.     static    char    *reptn_2 = NULL;
  528.  
  529.     if ( flag == 0 )
  530.     {    /* 検索パータンのコンパイル    */
  531.         reptn_1 = RePtnAlloc("番号 発言 (未読)  最新  会議室名",0);
  532.  
  533.         /*                          " 1     658 (   0)   12/17   【7/ AV】フリートーク#5"    */
  534.         reptn_2 = RePtnAlloc("..     ... (....)   ../..   .*",0);
  535.         flag = 1;
  536.     }
  537.     if (        RePtnMatch( reptn_1, buf) == 0 )
  538.     {    NTM_puts(ntm,"\r\n");
  539.         NTM_puts(ntm,buf);
  540.     } else if ( RePtnMatch( reptn_2, buf) == 0 )
  541.         NTM_puts(ntm,buf);
  542.     return (0);
  543. }
  544.  
  545. /*************************************************************************
  546. *    フィルタ用関数    :    発言タイトルのピックアップ
  547. *************************************************************************/
  548.  
  549. int        NiftyFilter_confTitle( char *ntm, char *buf )
  550. {
  551.     int                i, len;
  552.     char            key[8+4], *name;
  553.     static    int        flag = 0;
  554.     static    char    *reptn_1 = NULL;
  555.     static    char    *reptn_2 = NULL;
  556.     static    char    *reptn_3 = NULL;
  557.     static    char    *reptn_4 = NULL;
  558.     static    char    *reptn_5 = NULL;
  559.     static    char    *reptn_6 = NULL;
  560.  
  561.     if ( flag == 0 )
  562.     {
  563.         _nif_open_amac();
  564.  
  565.         /* 検索パターンのコンパイル    */
  566.         /*                     "- FORUM  MES( 1):title… -"    */
  567.         reptn_1 = RePtnAlloc("- [A-Z].* MES(.[0-9]):.* -",0);
  568.         /*                     "999/999   ABC01234  Handle            title…"    */
  569.         reptn_2 = RePtnAlloc("[0-9]../[0-9]..   ...[0-9]....  .* .*",0);
  570.  
  571.         /*------------------------------------------------------------------*/
  572.         /* 通常会議室                                                        */
  573.         /*                   "番号 ID       登録日      TO   CO   題名"    */
  574.         reptn_3 = RePtnAlloc("番号 ID       登録日      TO   CO   題名",0);
  575.         /*                   "   3 ABC01234 12/07 22:53       0   title…"    */
  576.         /*                   " ... ........ ../.. ..:.. ... ...   .*"        */
  577.         reptn_4 = RePtnAlloc(" ... ........ ../.. ..:.. ... ...   .*",0);
  578.  
  579.         /*----------------------------------------------------------------------*/
  580.         /* サイクリック型                                                        */
  581.         /*                   "番号   ID       登録日      TO     CO 題名"        */
  582.         reptn_5 = RePtnAlloc("番号   ID       登録日      TO     CO 題名",0);
  583.         /*                   "   999 ABC01234 12/22 23:49 00111   1 title…"    */
  584.         reptn_6 = RePtnAlloc(" .[ 0-9]... ........ ../.. ..:.. ..... ... .*",0);
  585.         flag = 1;
  586.     }
  587.  
  588.     if ( *buf == '-' )
  589.     {
  590.         if (        RePtnMatch( reptn_1, buf) == 0 )
  591.         {    NTM_puts(ntm,"\r\n");
  592.             NTM_puts(ntm,buf);
  593.         }
  594.     } else
  595.     {
  596.         len = strlen(buf);
  597.         if ( buf < 18 )
  598.             return;
  599.         if ( strncmp(buf,"番号",4) == 0 )
  600.         {
  601.             if ( RePtnMatch( reptn_3, buf) == 0
  602.               || RePtnMatch( reptn_5, buf) == 0 )
  603.             {    NTM_puts(ntm,"\r\n");
  604.                 NTM_puts(ntm,buf);
  605.             }
  606.         } else if ( strchr(buf,'/') )
  607.         {
  608.             if ( RePtnMatch( reptn_2, buf) == 0 )
  609.                 NTM_puts(ntm,buf);
  610.             else if ( RePtnMatch( reptn_4, buf) == 0 )
  611.             {
  612.                 /* "   3 ABC01234 12/07 22:53       0   title…"    */
  613.                 strncpy( key, &buf[5], 8 );    key[8] = '\0';
  614.                 if ( (name = AMAC_getName( _nif_amac, key )) != NULL )
  615.                 {
  616.                     for ( i = 0; i < 8; ++i )
  617.                     {    if ( *name )
  618.                         {    buf[5+i] = *name;
  619.                             ++name;
  620.                         } else
  621.                             buf[5+i] = ' ';
  622.                     }
  623.                 }
  624.                 NTM_puts(ntm,buf);
  625.             } else if ( RePtnMatch( reptn_6, buf) == 0 )
  626.             {
  627.                 /* "   999 ABC01234 12/22 23:49 00111   1 title…"    */
  628.                 strncpy( key, &buf[7], 8 );    key[8] = '\0';
  629.                 if ( (name = AMAC_getName( _nif_amac, key )) != NULL )
  630.                 {
  631.                     for ( i = 0; i < 8; ++i )
  632.                     {    if ( *name )
  633.                         {    buf[7+i] = *name;
  634.                             ++name;
  635.                         } else
  636.                             buf[7+i] = ' ';
  637.                     }
  638.                 }
  639.                 NTM_puts(ntm,buf);
  640.             }
  641.         }
  642.     }
  643.     return (0);
  644. }
  645.  
  646. char    *_niftyFilter_reptn_rtc = NULL;
  647.  
  648. /*************************************************************************
  649. *    フィルタ用関数    :    リアルタイム会議室
  650. *************************************************************************/
  651.  
  652. int        NiftyFilter_rtc( char *ntm, char *buf )
  653. {
  654.     if ( _niftyFilter_reptn_rtc == NULL )
  655.     {    _niftyFilter_reptn_rtc
  656.              = RePtnAlloc("([0-9],.*).*",0);
  657.     }
  658.     if ( *buf == '(' )
  659.     {    if ( RePtnMatch( _niftyFilter_reptn_rtc, buf) == 0 )
  660.             NTM_puts(ntm,buf);
  661.     }
  662. }
  663.  
  664. int        _nif_set_rtcFilter( char *ntm )
  665. {
  666.     char    *dlg;
  667.     int        ret, ch;
  668.     char    tmp[16], ptn[128];
  669.  
  670.     tmp[0] = '\0';
  671.     dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  672.                         "表示するチャンネルを指定してください。\n    (指定のない場合はすべて)    ");
  673.     DLG_getsSetTitle( dlg, "RTC FILTER" );
  674.     ret = DLG_getsStart( dlg, 15, tmp );
  675.     DLG_getsClose(dlg);
  676.     if ( ret >= 0 )
  677.     {
  678.         if ( ret == 0 )
  679.             strcpy( ptn, "([0-9]*,.*)");
  680.         else
  681.         {
  682.             if ( (ch = atoi(tmp)) < 1 )
  683.                 return (ERR);
  684.             sprintf( ptn, "(%d,.*)", ch );
  685.         }
  686.         if ( _niftyFilter_reptn_rtc )
  687.             RePtnFree(_niftyFilter_reptn_rtc);
  688.         _niftyFilter_reptn_rtc  = RePtnAlloc(ptn,0);
  689.         _ntm_setFilterFunc( ntm, "NiftyFilter_rtc");
  690.         return (NORMAL);
  691.     } else
  692.         return (ERR);
  693. }
  694.  
  695.  
  696. /*************************************************************************
  697. *    フィルタ用関数    :    データライブラリ
  698. *************************************************************************/
  699.  
  700. int        NiftyFilter_dataLibrary( char *ntm, char *buf )
  701. {
  702.     int                i, len, sub;
  703.     char            *center;
  704.     char            *s, *t, fn[16], downFn[128];
  705.     char            key[8+4], *name;
  706.     static    int        flag = 0;
  707.     static    char    *reptn_1 = NULL;
  708.     static    char    *reptn_2 = NULL;
  709.     static    char    *reptn_3 = NULL;
  710.     static int        headerLevel = 0;
  711.  
  712.     if ( flag == 0 )
  713.     {
  714.         _nif_open_amac();
  715.  
  716.         /*                     "番号  ID       登録日付 バイト  参照   データ名"        */
  717.         reptn_1 = RePtnAlloc("番号  ID       登録日付 バイト  参照   データ名",0);
  718.         /*                     "  48  ABC01234 93/01/01   99999  999 B FILENAME.SUB"    */
  719.         reptn_2 = RePtnAlloc("..... ........ ../../.. ....... .... . .*",1);
  720.         reptn_3 = RePtnAlloc("処理 (.*)",0);
  721.         flag = 1;
  722.     }
  723.  
  724.     len = strlen(buf);
  725.     if ( len > 42 && RePtnMatch( reptn_1, buf) == 0 )
  726.     {    NTM_puts(ntm,"\r\n");
  727.         NTM_puts(ntm,buf);
  728.         headerLevel = 0;
  729.     } else if ( len > 40 && RePtnMatch( reptn_2, buf) == 0 )
  730.     {
  731.         /*    "  48  ABC01234 93/01/01   99999  999 B FILENAME.SUB"    */
  732.         strncpy( key, &buf[6], 8 );    key[8] = '\0';
  733.         if ( (name = AMAC_getName( _nif_amac, key )) != NULL )
  734.         {
  735.             for ( i = 0; i < 8; ++i )
  736.             {    if ( *name )
  737.                 {    buf[6+i] = *name;
  738.                     ++name;
  739.                 } else
  740.                     buf[6+i] = ' ';
  741.             }
  742.         }
  743.         NTM_puts(ntm,buf);
  744.         headerLevel = 0;
  745.     } else if ( len > 10 && strncmp( buf, "データ名:", 10) == 0 )
  746.     {    /* ダウンロードファイル名設定    */
  747.         NTM_puts( ntm, "\r\n" );
  748.         NTM_puts( ntm, buf );
  749.         headerLevel = 1;
  750.  
  751.         s = &buf[10];
  752.         if ( isspace(*s) )
  753.             return;
  754.         t = fn;
  755.         len = 0;
  756.         sub = 0;
  757.         while ( len < 13 )
  758.         {
  759.             if ( *s == '\0' || isspace(*s) )
  760.             {    *t = '\0';
  761.                 break;
  762.             } else if ( *s == '.' )
  763.                 sub = 1;
  764.             *t = *s;
  765.             ++t;
  766.             ++s;
  767.             ++len;
  768.         }
  769.         if ( len > 12 )
  770.             return;
  771.         if ( sub == 0 && len < 8 && *s )
  772.         {
  773.             while( isspace(*s) )
  774.                 ++s;
  775.             if ( *s == '.' )
  776.             {    /* 拡張子    */
  777.                 while ( len < 13 )
  778.                 {    if ( *s == '\0' || isspace(*s) )
  779.                     {    *t = '\0';
  780.                         break;
  781.                     }
  782.                     *t = *s;
  783.                     ++s;
  784.                     ++t;
  785.                     ++len;
  786.                 }
  787.                 if ( len > 12 )
  788.                     return;
  789.             }
  790.         }
  791.         if ( (center = NtmGetCenterPtr(ntm)) != NULL )
  792.         {    /* センター名の指定あり    */
  793.             s = NtmCenterGetDownDir(center);
  794.             if ( s && *s )
  795.                 sprintf( downFn, "%s/%s", s, fn );
  796.         } else
  797.             strcpy( downFn, fn );
  798.         NTM_setCmdStr( ntm, downFn );
  799.     } else if ( headerLevel > 0 )
  800.     {
  801.         if ( headerLevel < 7 )
  802.         {
  803.             if ( strncmp( &buf[8], ":",2) == 0 )
  804.             {    NTM_puts( ntm, buf );
  805.                 ++headerLevel;
  806.             }
  807.         } else
  808.         {    if ( RePtnMatch( reptn_3, buf) == 0 )
  809.             {    headerLevel = 0;
  810.             } else
  811.                 NTM_puts( ntm, buf );
  812.         }
  813.     }
  814.     return (NORMAL);
  815. }
  816.  
  817. #if    0    /* 未完成    */
  818. /*************************************************************************
  819. *    フィルタ用関数    :    SEND対応用
  820. *************************************************************************/
  821.  
  822. int        NiftyFilter_send( char *ntm, char *buf )
  823. {
  824. }
  825. #endif
  826.  
  827. /*************************************************************************
  828. *    フィルタ設定メニュー
  829. *************************************************************************/
  830.  
  831. int        _NIFTY_filterMenu( char *ntm, int x, int y )
  832. {
  833.     int        ret;
  834.     char    *obj;
  835.     char    *mnu;
  836.  
  837.     obj = MNU_alloc(10);
  838.     MNU_setObj(obj, 0, MNU_NOR, 'F', "Set filter pattern"   , NULL, 1, NULL, NULL );
  839.     MNU_setObj(obj, 1, MNU_NOR, 'O', "Filter mode off"      , NULL, 2, NULL, NULL );
  840.     MNU_setObj(obj, 2, MNU_NOR, 'T', "Filter test"          , NULL, 3, NULL, NULL );
  841.     MNU_setObj(obj, 3, MNU_BLK,  0 , NULL                   , NULL, 0, NULL, NULL );
  842.     MNU_setObj(obj, 4, MNU_NOR, '1', "Room title"           , NULL, 4, NULL, NULL );
  843.     MNU_setObj(obj, 5, MNU_NOR, '2', "Conferrence title"    , NULL, 5, NULL, NULL );
  844.     MNU_setObj(obj, 6, MNU_NOR, '3', "Data library"         , NULL, 6, NULL, NULL );
  845.     MNU_setObj(obj, 7, MNU_NOR, '4', "Real time conferrence", NULL, 7, NULL, NULL );
  846.     MNU_setObj(obj, 8, MNU_BLK,  0 , NULL                   , NULL, 0, NULL, NULL );
  847.     MNU_setObj(obj, 9, MNU_NOR, 'H', "Register Handle"      , NULL, 8, NULL, NULL );
  848.  
  849.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "FILTER MENU" );
  850.     ret = MNU_start ( mnu );
  851.     MNU_close(mnu);
  852.     MNU_free(obj);
  853.     switch ( ret )
  854.     {
  855.         case 1:
  856.             _ntm_inputFilterPtn( ntm );
  857.             break;
  858.         case 2:    /* filter off */
  859.             NtmSetFilterPtn ( ntm, "",0 );
  860.             NtmSetFilterFunc( ntm, NULL );
  861.             NtmFilterModeOff( ntm );
  862.             break;
  863.         case 3:
  864.             _ntm_filterTest( ntm );
  865.             break;
  866.         case 4:
  867.             _ntm_setFilterFunc( ntm, "NiftyFilter_roomTitle");
  868.             break;
  869.         case 5:
  870.             _ntm_setFilterFunc( ntm, "NiftyFilter_confTitle");
  871.             break;
  872.         case 6:
  873.             _ntm_setFilterFunc( ntm, "NiftyFilter_dataLibrary");
  874.             break;
  875.         case 7:    /* リアルタイム会議室    */
  876.             _nif_set_rtcFilter( ntm );
  877.             break;
  878.         case 8:    /* ハンドル登録    */
  879.             _nif_setAmac(ntm,x,y);
  880.             break;
  881.     }
  882.     return (NORMAL);
  883. }
  884.  
  885.  
  886. int        CCI_dspNiftyStt()
  887. {
  888.     char    *center;
  889.     char    *name;
  890.     long    loginTime, logoutTime;
  891.     char    t1[32], t2[32];
  892.  
  893.     if ( (center = NTM_getCenter(CENTERKEY)) == NULL )
  894.         return (ERR);
  895.     name = NtmCenterGetName(center);
  896.     loginTime  = NtmCenterGetTime( center, NTM_TIME_LOGIN );
  897.     logoutTime = NtmCenterGetTime( center, NTM_TIME_LOGOUT );
  898.     DLG_tmpMsgBox( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  899.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  900.         "  センター名 : %s\n  Login time       %s  \n  Last logout time %s  ",
  901.         name, GetAsciiTime(t1, loginTime), GetAsciiTime(t2,logoutTime) );
  902.     return (NORMAL);
  903. }
  904.  
  905. #undef    CENTERKEY
  906. #undef    RECKEY
  907.